﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace V82.ОбщиеМодули
{
	public partial class УправлениеКонтактами
	{
		// Функция возвращает номер строки в поле табличного документа
		//  для вывода События по его дате (начала или конца)
		//
		// Параметры
		//  Часы - Строка, часы даты
		//  Минуты - Строка, минуты даты
		//  Дата - Дата, текущее значение даты для определения
		//  Начало - Булево, признак начала или окончания периода
		//  ДатаСравнения - Дата, дата с которой сравнивается значение исходной даты
		//
		// Возвращаемое значение:
		//   Число - номер строки в поле табличного документа
		//

		public object ВозвратитьНомерСтроки(/*Часы, Минуты, Дата, Начало, ДатаСравнения*/)
		{
			if(true/*ПустаяСтрока(Часы)*/)
			{
				//Часы = 0;
			}
			if(true/*ПустаяСтрока(Минуты)*/)
			{
				//Минуты = 0;
			}
			if(true/*Начало*/)
			{
				if(true/*Дата < НачалоДня(ДатаСравнения)*/)
				{
				}
			}
			return null;
		}
		// Процедура выполняется при проведении или отмене проведения документа Событие
		//  и переписывает записи регитра сведений СобытияКалендаряПользователя.

		public void РаспределитьСобытияДня(/*ДатаРаспределения,Пользователь = Неопределено*/)
		{
			if(true/*Пользователь = Неопределено*/)
			{
				//Пользователь = Справочники.Пользователи.ПустаяСсылка();
			}
			//Запрос = Новый Запрос;
			/*Запрос.Текст = "
	|ВЫБРАТЬ
	|	СобытияКалендаряПользователяОбобщенные.Событие КАК Событие,
	|	СобытияКалендаряПользователяОбобщенные.НомерНачальнойСтроки КАК НомерНачальнойСтроки,
	|	СобытияКалендаряПользователяОбобщенные.НомерКонечнойСтроки КАК НомерКонечнойСтроки
	|ИЗ
	|	РегистрСведений.СобытияКалендаряПользователяОбобщенные КАК СобытияКалендаряПользователяОбобщенные
	|ГДЕ
	|	СобытияКалендаряПользователяОбобщенные.Дата = &ВыбДата
	|	И
	|	СобытияКалендаряПользователяОбобщенные.Пользователь = &ВыбПользователь
	|";*/
			//Запрос.УстановитьПараметр("ВыбДата", ДатаРаспределения);
			//Запрос.УстановитьПараметр("ВыбПользователь", Пользователь);
			//ТаблицаЗапроса = Запрос.Выполнить().Выгрузить();
			//НомерСтрокиНачало = 0;
			//НомерСтрокиКонец  = 0;
			if(true/*ТаблицаЗапроса.Количество() > 0*/)
			{
				//КопияТаблицыЗапроса = ТаблицаЗапроса.Скопировать();
				//КопияТаблицыЗапроса.Сортировать("НомерНачальнойСтроки ВОЗР");
				//НомерСтрокиНачало = КопияТаблицыЗапроса[0].НомерНачальнойСтроки;
				//КопияТаблицыЗапроса.Сортировать("НомерКонечнойСтроки УБЫВ");
				//НомерСтрокиКонец = КопияТаблицыЗапроса[0].НомерКонечнойСтроки;
			}
			//СписокЗначенийВремен = Новый СписокЗначений;
			if(true/*НомерСтрокиНачало <> 0 И НомерСтрокиКонец <> 0*/)
			{
			}
			/*// Очистим значения предидущего распределния
*/
			//НаборЗаписейРегистра = РегистрыСведений.СобытияКалендаряПользователя.СоздатьНаборЗаписей();
			//НаборЗаписейРегистра.Отбор.Пользователь.Значение      = Пользователь;
			//НаборЗаписейРегистра.Отбор.Пользователь.Использование = Истина;
			//НаборЗаписейРегистра.Отбор.Дата.Значение              = ДатаРаспределения;
			//НаборЗаписейРегистра.Отбор.Дата.Использование         = Истина;
			//НаборЗаписейРегистра.Очистить();
			/*// Проведем распределение заново
*/
			//НаборЗаписейРегистра.Записать();
			if(true/*ТипЗнч(КопияТаблицыЗапроса) = Тип("ТаблицаЗначений")*/)
			{
				//СписокДокументов = Новый СписокЗначений;
				//СписокДокументов.ЗагрузитьЗначения(КопияТаблицыЗапроса.ВыгрузитьКолонку("Событие"));
			}
		}
		// Процедура выполняет запись в регистр сведений
		//

		public void ВвестиЗаписьВРегистр(/*Дата, НомерНачальнойСтроки, НомерКонечнойСтроки, НаборЗаписейРегистра, Ссылка, ДатаНачала, ДатаОкончания*/)
		{
			//НоваяЗапись = НаборЗаписейРегистра.Добавить();
			//НоваяЗапись.Событие              = Ссылка;
			//НоваяЗапись.Дата                 = Дата;
			//НоваяЗапись.НомерНачальнойСтроки = НомерНачальнойСтроки;
			//НоваяЗапись.НомерКонечнойСтроки  = НомерКонечнойСтроки;
			//НоваяЗапись.Пользователь         = Справочники.Пользователи.ПустаяСсылка();
			//НоваяЗапись.ДатаНачалаСобытия    = ДатаНачала;
			//НоваяЗапись.ДатаКонцаСобытия     = ДатаОкончания;
		}
		// Процедура отражает занятость помещений в регистрах сведений для календаря пользователя
		//

		public void ОтразитьЗанятостьПомещений(/*Ссылка,ДатаНачала,ДатаОкончания,мСтараяДатаНачалаСобытия,мСтараяДатаОкончанияСобытия*/)
		{
			//НаборЗаписей = РегистрыСведений.СобытияКалендаряПользователяОбобщенные.СоздатьНаборЗаписей();
			//НаборЗаписей.Отбор.Событие.Значение = Ссылка;
			//НаборЗаписей.Отбор.Событие.Использование = Истина;
			//НаборЗаписей.Отбор.Пользователь.Значение = Справочники.Пользователи.ПустаяСсылка();
			//НаборЗаписей.Отбор.Пользователь.Использование = Истина;
			//НаборЗаписей.Очистить();
			//НачальнаяСтрока = ВозвратитьНомерСтроки(Формат(ДатаНачала,"ДФ=Ч"), Формат(ДатаНачала,"ДФ=м"), ДатаНачала, Истина, ДатаНачала);
			if(true/*Формат(ДатаНачала,"ДФ=Ч") = Формат(ДатаОкончания,"ДФ=Ч") И Формат(ДатаНачала,"ДФ=м") = Формат(ДатаОкончания,"ДФ=м")*/)
			{
				//КонечнаяСтрока  = НачальнаяСтрока;
			}
			if(true/*НачалоДня(ДатаНачала) <> НачалоДня(ДатаОкончания)*/)
			{
				//КоличествоИнтерваловМеждуДнями = Цел((НачалоДня(ДатаОкончания) - КонецДня(ДатаНачала) + 1)/(60*60*24));
				//ВвестиЗаписьВРегистр(НачалоДня(ДатаНачала), НачальнаяСтрока, 48, НаборЗаписей, Ссылка, ДатаНачала, ДатаОкончания);
				//ВвестиЗаписьВРегистр(НачалоДня(ДатаОкончания), 1, КонечнаяСтрока, НаборЗаписей, Ссылка, ДатаНачала, ДатаОкончания);
			}
			if(true/*НаборЗаписей.Количество() > 0*/)
			{
				//НаборЗаписей.Записать();
			}
			//СписокПерераспределенныхДат = Новый СписокЗначений;
			if(true/*НачалоДня(мСтараяДатаНачалаСобытия) <> НачалоДня(ДатаНачала) ИЛИ НачалоДня(мСтараяДатаОкончанияСобытия) <> НачалоДня(ДатаОкончания)*/)
			{
				//КоличествоИнтерваловМеждуДнями = Цел((КонецДня(мСтараяДатаОкончанияСобытия) + 1 - НачалоДня(мСтараяДатаНачалаСобытия))/(60*60*24));
			}
			if(true/*НачалоДня(ДатаНачала) <> НачалоДня(ДатаОкончания)*/)
			{
				//КоличествоИнтерваловМеждуДнями = Цел((НачалоДня(ДатаОкончания) - КонецДня(ДатаНачала) + 1)/(60*60*24));
				if(true/*СписокПерераспределенныхДат.НайтиПоЗначению(НачалоДня(ДатаНачала)) = Неопределено*/)
				{
					//РаспределитьСобытияДня(НачалоДня(ДатаНачала));
				}
				if(true/*СписокПерераспределенныхДат.НайтиПоЗначению(НачалоДня(ДатаОкончания)) = Неопределено*/)
				{
					//РаспределитьСобытияДня(НачалоДня(ДатаОкончания));
				}
			}
		}
		// Процедура отменяет занятость помещений в регистрах сведений для календаря пользователя
		//

		public void ОтменитьЗанятостьПомещений(/*Ссылка,ДатаНачала,ДатаОкончания,мСписокПользователей,мСписокСтарыхПользователей*/)
		{
			//НаборЗаписей = РегистрыСведений.СобытияКалендаряПользователяОбобщенные.СоздатьНаборЗаписей();
			//НаборЗаписей.Отбор.Событие.Значение = Ссылка;
			//НаборЗаписей.Отбор.Событие.Использование = Истина;
			//НаборЗаписей.Очистить();
			//НаборЗаписей.Записать();
			if(true/*НачалоДня(ДатаНачала) <> НачалоДня(ДатаОкончания)*/)
			{
				//КоличествоИнтерваловМеждуДнями = Цел((НачалоДня(ДатаОкончания) - КонецДня(ДатаНачала) + 1)/(60*60*24));
			}
		}
		// Функция определяет начало и окончание рабочего дня пользователя, по его графику работы
		//
		// Параметры
		//  Пользователь - СправочникСсылка.Пользователи, пользователь по которому определяются
		//                 <продолжение описания параметра>
		//  <Параметр2>  – <Тип.Вид> – <описание параметра>
		//                 <продолжение описания параметра>
		//
		// Возвращаемое значение:
		//   <Тип.Вид>   – <описание возвращаемого значения>
		//

		public object ОпределитьНачалоИОкончаниеРабочегоДняПользователя(/*Пользователь, РабочаяДата*/)
		{
			//ДатаНачала		= '00010101000000';
			//ДатаОкончания	= '00010101235959';
			//НайденныйГрафик	= Неопределено;
			//Запрос = Новый Запрос;
			//Запрос.УстановитьПараметр("Пользователь",	Пользователь);
			//Запрос.УстановитьПараметр("ДатаСреза",		РабочаяДата);
			/*Запрос.Текст =
	"ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ВложенныйЗапрос.ГрафикРаботы
	|ИЗ
	|	(ВЫБРАТЬ
	|		РаботникиСрезПоследних.ГрафикРаботы КАК ГрафикРаботы
	|	ИЗ
	|		РегистрСведений.Работники.СрезПоследних(
	|				&ДатаСреза,
	|				Физлицо В
	|					(ВЫБРАТЬ
	|						Пользователи.ФизЛицо
	|					ИЗ
	|						Справочник.Пользователи КАК Пользователи
	|					ГДЕ
	|						Пользователи.Ссылка = &Пользователь)) КАК РаботникиСрезПоследних
	|	
	|	ОБЪЕДИНИТЬ
	|	
	|	ВЫБРАТЬ
	|		РаботникиОрганизацийСрезПоследних.ГрафикРаботы
	|	ИЗ
	|		РегистрСведений.РаботникиОрганизаций.СрезПоследних(
	|				&ДатаСреза,
	|				Сотрудник.Физлицо В
	|					(ВЫБРАТЬ
	|						Пользователи.ФизЛицо
	|					ИЗ
	|						Справочник.Пользователи КАК Пользователи
	|					ГДЕ
	|						Пользователи.Ссылка = &Пользователь)) КАК РаботникиОрганизацийСрезПоследних) КАК ВложенныйЗапрос";*/
			//Выборка = Запрос.Выполнить().Выбрать();
			if(true/*Выборка.Следующий()*/)
			{
				//НайденныйГрафик = Выборка.ГрафикРаботы;
			}
			if(true/*НЕ ЗначениеЗаполнено(НайденныйГрафик)*/)
			{
				//НайденныйГрафик = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(Пользователь, "ГрафикРаботы");
			}
			if(true/*ЗначениеЗаполнено(НайденныйГрафик) И ТипЗнч(НайденныйГрафик) = Тип("СправочникСсылка.ГрафикиРаботы")*/)
			{
				//Запрос.УстановитьПараметр("ГрафикРаботы",	НайденныйГрафик);
				/*Запрос.Текст = 
		"ВЫБРАТЬ
		|	МИНИМУМ(ВремяРаботы.ВремяНачала) КАК ВремяНачала,
		|	МАКСИМУМ(ВремяРаботы.ВремяОкончания) КАК ВремяОкончания
		|ИЗ
		|	(ВЫБРАТЬ
		|		ГрафикиРаботыПериодыСмены.ВремяНачала КАК ВремяНачала,
		|		ГрафикиРаботыПериодыСмены.ВремяОкончания КАК ВремяОкончания
		|	ИЗ
		|		Справочник.ГрафикиРаботы.ПериодыСмены КАК ГрафикиРаботыПериодыСмены
		|	
		|	ГДЕ
		|		ГрафикиРаботыПериодыСмены.Ссылка = &ГрафикРаботы
		|	
		|	ОБЪЕДИНИТЬ ВСЕ
		|	
		|	ВЫБРАТЬ
		|		СменыПериодыСмены.ВремяНачала,
		|		СменыПериодыСмены.ВремяОкончания
		|	ИЗ
		|		Справочник.ГрафикиРаботы.Смены КАК ГрафикиРаботыСмены
		|			ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Смены.ПериодыСмены КАК СменыПериодыСмены
		|			ПО ГрафикиРаботыСмены.Смена = СменыПериодыСмены.Ссылка
		|	
		|	ГДЕ
		|		ГрафикиРаботыСмены.Ссылка = &ГрафикРаботы) КАК ВремяРаботы";*/
				//Выборка = Запрос.Выполнить().Выбрать();
				if(true/*Выборка.Следующий()*/)
				{
					//ДатаНачала = Выборка.ВремяНачала;
					if(true/*ЗначениеЗаполнено(Выборка.ВремяОкончания)*/)
					{
						//ДатаОкончания = Выборка.ВремяОкончания;
					}
				}
			}
			//СтруктураВозврата = Новый Структура("ДатаНачала, ДатаОкончания", ДатаНачала, ДатаОкончания);
			return null;
		}
		// ОпределитьНачалоИОкончаниеРабочегоДняПользователя()
		// Процедура показывает формы Напоминаний.
		//
		//  Параметры
		//   ТаблицаНапоминаний - ТаблицаЗначений, с Напоминаниями
		//

		public void ОбработкаСпискаНапоминаний(/*ТаблицаНапоминаний*/)
		{
			//ФормаНапоминания = ПолучитьОбщуюФорму("ФормаНапоминания",,"Уникум");
			//ФормаНапоминания.ОбновитьТаблицуНапоминаний(ТаблицаНапоминаний);
			if(true/*ФормаНапоминания.Открыта()*/)
			{
				//ФормаНапоминания.Активизировать();
			}
		}
		// ОбработкаСпискаНапоминаний()
		// Процедура проверяет Напоминания из регистра.
		//
		//  Параметры
		//   ТаблицаНапоминаний - ТаблицаЗначений, с Напоминаниями
		//

		public void ПроверитьНапоминанияПользователя(/*ВыбПользователь, ПроверятьДеньРождения = Ложь*/)
		{
			//РезультирующаяТаблица = Новый ТаблицаЗначений;
			//РезультирующаяТаблица.Колонки.Добавить("ДокументНапоминания");
			//РезультирующаяТаблица.Колонки.Добавить("Пользователь");
			//РезультирующаяТаблица.Колонки.Добавить("ДатаНапоминания");
			//РезультирующаяТаблица.Колонки.Добавить("Тема");
			//РезультирующаяТаблица.Колонки.Добавить("Контрагент");
			//РезультирующаяТаблица.Колонки.Добавить("КонтактноеЛицо");
			//РезультирующаяТаблица.Колонки.Добавить("ТекстНапоминания");
			//РезультирующаяТаблица.Колонки.Добавить("ФлагДеньРождения");
			if(true/*ПроверятьДеньРождения*/)
			{
				//Запрос = Новый Запрос;
				/*Запрос.Текст = "
		|ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	КонтактныеЛицаКонтрагентов.КонтактноеЛицо              КАК КонтактноеЛицо,
		|	КонтактныеЛицаКонтрагентов.Владелец                    КАК Контрагент,
		|	КонтактныеЛицаКонтрагентов.РольКонтактногоЛица         КАК РольКонтактногоЛица,
		|	КонтактныеЛицаКонтрагентов.Должность                   КАК ДолжностьКонтактногоЛица,
		|	КонтактныеЛицаКонтрагентов.КонтактноеЛицо.ДатаРождения КАК ДатаРождения
		|ИЗ
		|	Справочник.КонтактныеЛицаКонтрагентов КАК КонтактныеЛицаКонтрагентов
        |
		|ЛЕВОЕ СОЕДИНЕНИЕ
		|	Справочник.Контрагенты.МенеджерыПокупателя КАК Менеджеры
		|ПО
		|	Менеджеры.Ссылка = КонтактныеЛицаКонтрагентов.Владелец
		|
		|ГДЕ
		|	(КонтактныеЛицаКонтрагентов.Владелец.ОсновнойМенеджерПокупателя = &ТекущийПользователь
		|	ИЛИ Менеджеры.МенеджерПокупателя = &ТекущийПользователь)
		|	И КонтактныеЛицаКонтрагентов.Владелец ССЫЛКА Справочник.Контрагенты
		|	И КонтактныеЛицаКонтрагентов.Владелец <> &ПустойКонтрагент
		|	И КонтактныеЛицаКонтрагентов.КонтактноеЛицо.НапоминатьОДнеРождения = Истина
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ 
		|	ЛичныеКонтакты.Ссылка 			КАК КонтактноеЛицо,
		|	NULL 							КАК Контрагент,
		|	NULL 							КАК РольКонтактногоЛица,
		|	NULL        					КАК ДолжностьКонтактногоЛица,
		|	ЛичныеКонтакты.ДатаРождения  	КАК ДатаРождения
		|ИЗ
		|	Справочник.ЛичныеКонтакты КАК ЛичныеКонтакты
		|
		|ГДЕ
		|	ЛичныеКонтакты.ПользовательДляОграниченияПравДоступа = &ТекущийПользователь
		|	И ЛичныеКонтакты.НапоминатьОДнеРождения = Истина
		|
		//|ОБЪЕДИНИТЬ ВСЕ
		//|
		//|ВЫБРАТЬ
		//|	КонтактныеЛица.Ссылка                   КАК КонтактноеЛицо,
		//|	КонтактныеЛицаКонтрагентов.Владелец     КАК Контрагент,
		//|	КонтактныеЛицаКонтрагентов.РольКонтактногоЛица КАК РольКонтактногоЛица,
		//|	КонтактныеЛицаКонтрагентов.Должность    КАК ДолжностьКонтактногоЛица,
		//|	КонтактныеЛица.ДатаРождения             КАК ДатаРождения
		//|ИЗ
		//|	Справочник.КонтактныеЛица КАК КонтактныеЛица
		//|ЛЕВОЕ СОЕДИНЕНИЕ
		//|	Справочник.КонтактныеЛицаКонтрагентов КАК КонтактныеЛицаКонтрагентов
		//|	ПО 
		//|	КонтактныеЛицаКонтрагентов.КонтактноеЛицо = КонтактныеЛица.Ссылка
		//|
		//|ГДЕ
		//|	КонтактныеЛицаКонтрагентов.Владелец = &ТекущийПользователь
		//|	И (КонтактныеЛицаКонтрагентов.Владелец ЕСТЬ NULL
		//|	ИЛИ КонтактныеЛицаКонтрагентов.Владелец = &ПустойКонтрагент)
		//|	И КонтактныеЛица.НапоминатьОДнеРождения = Истина
		|";*/
				//Запрос.УстановитьПараметр("ТекущийПользователь"      , ВыбПользователь);
				//Запрос.УстановитьПараметр("ПустойКонтрагент"      	 , Справочники.Контрагенты.ПустаяСсылка());
				//ТаблицаЗапроса = Запрос.Выполнить().Выгрузить();
				//ЗапросСобытий = Новый Запрос;
				/*ЗапросСобытий.Текст = "
		|ВЫБРАТЬ РАЗРЕШЕННЫЕ
		|	Событие.КонтактноеЛицо КАК КонтактноеЛицо
		|ИЗ
		|	Документ.Событие КАК Событие
		|	
		|ГДЕ
		|	Событие.ОписаниеСобытия ПОДОБНО &СтрокаДеньРождения
		|	И Событие.Дата >= &ДатаНачСобытия
		|	И Событие.Дата <= &ДатаКонСобытия
		|	И Событие.Проведен = ИСТИНА
		|	И Событие.СостояниеСобытия = &СостояниеСобытия
		|";*/
				//ЗапросСобытий.УстановитьПараметр("ДатаНачСобытия"    , НачалоДня(ТекущаяДата() - 30*24*60*60));
				//ЗапросСобытий.УстановитьПараметр("ДатаКонСобытия"    , КонецДня(ТекущаяДата() + 30*24*60*60));
				//ЗапросСобытий.УстановитьПараметр("СтрокаДеньРождения", "%День рождения%");
				//ЗапросСобытий.УстановитьПараметр("СостояниеСобытия"  , Перечисления.СостоянияСобытий.Запланировано);
				//СобытияДняРождения = ЗапросСобытий.Выполнить().Выгрузить();
			}
			//Запрос = Новый Запрос;
			//ДатаСреза = ТекущаяДата() + Константы.ИнтервалПроверкиНапоминанийВСекундах.Получить();
			//Запрос.УстановитьПараметр("ДатаСреза"           , ДатаСреза);
			//Запрос.УстановитьПараметр("ВыбПользователь"     , ВыбПользователь);
			//Запрос.УстановитьПараметр("СостояниеСобытия"    , Перечисления.СостоянияСобытий.Запланировано);
			//Запрос.УстановитьПараметр("ПустойКонтрагент"    , Справочники.Контрагенты.ПустаяСсылка());
			//Запрос.УстановитьПараметр("ПустоеКонтактноеЛицо", Справочники.КонтактныеЛица.ПустаяСсылка());
			/*Запрос.Текст = "
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	Событие.Ссылка           КАК ДокументНапоминания,
	|	Событие.Ответственный    КАК Пользователь,
	|	Событие.Контрагент       КАК Контрагент,
	|	Событие.КонтактноеЛицо   КАК КонтактноеЛицо,
	|	Событие.ВремяНапоминания КАК ДатаНапоминания
	|ИЗ
	|	Документ.Событие КАК Событие
	|	
	|ГДЕ 
	|	Событие.НапомнитьОСобытии = Истина
	|	И Событие.ВремяНапоминания <= &ДатаСреза
	|	И Событие.Ответственный = &ВыбПользователь
	|	И Событие.Проведен
	|	И Событие.СостояниеСобытия = &СостояниеСобытия
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	Заказ.Ссылка           КАК ДокументНапоминания,
	|	Заказ.Ответственный    КАК Пользователь,
	|	Заказ.Контрагент       КАК Контрагент,
	|	&ПустоеКонтактноеЛицо  КАК КонтактноеЛицо,
	|	Заказ.ВремяНапоминания КАК ДатаНапоминания
	|ИЗ
	|	Документ.ЗаказПокупателя КАК Заказ
	|	
	|ГДЕ 
	|	Заказ.НапомнитьОСобытии = Истина
	|	И Заказ.ВремяНапоминания <= &ДатаСреза
	|	И Заказ.Ответственный = &ВыбПользователь
	|	И Заказ.Проведен
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	Заказ.Ссылка           КАК ДокументНапоминания,
	|	Заказ.Ответственный    КАК Пользователь,
	|	&ПустойКонтрагент      КАК Контрагент,
	|	&ПустоеКонтактноеЛицо  КАК КонтактноеЛицо,
	|	Заказ.ВремяНапоминания КАК ДатаНапоминания
	|ИЗ
	|	Документ.ВнутреннийЗаказ КАК Заказ
	|	
	|ГДЕ 
	|	Заказ.НапомнитьОСобытии = Истина
	|	И Заказ.ВремяНапоминания <= &ДатаСреза
	|	И Заказ.Ответственный = &ВыбПользователь
	|	И Заказ.Проведен
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	Заказ.Ссылка           КАК ДокументНапоминания,
	|	Заказ.Ответственный    КАК Пользователь,
	|	Заказ.Контрагент       КАК Контрагент,
	|	&ПустоеКонтактноеЛицо  КАК КонтактноеЛицо,
	|	Заказ.ВремяНапоминания КАК ДатаНапоминания
	|ИЗ
	|	Документ.ЗаказПоставщику КАК Заказ
	|	
	|ГДЕ 
	|	Заказ.НапомнитьОСобытии = Истина
	|	И Заказ.ВремяНапоминания <= &ДатаСреза
	|	И Заказ.Ответственный = &ВыбПользователь
	|	И Заказ.Проведен
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	СчетПокупателя.Ссылка           КАК ДокументНапоминания,
	|	СчетПокупателя.Ответственный    КАК Пользователь,
	|	СчетПокупателя.Контрагент       КАК Контрагент,
	|	&ПустоеКонтактноеЛицо           КАК КонтактноеЛицо,
	|	СчетПокупателя.ВремяНапоминания КАК ДатаНапоминания
	|ИЗ
	|	Документ.СчетНаОплатуПокупателю КАК СчетПокупателя
	|	
	|ГДЕ 
	|	СчетПокупателя.НапомнитьОСобытии = Истина
	|	И СчетПокупателя.ВремяНапоминания <= &ДатаСреза
	|	И СчетПокупателя.Ответственный = &ВыбПользователь
	|	И НЕ СчетПокупателя.ПометкаУдаления
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	СчетПоставщика.Ссылка           КАК ДокументНапоминания,
	|	СчетПоставщика.Ответственный    КАК Пользователь,
	|	СчетПоставщика.Контрагент       КАК Контрагент,
	|	&ПустоеКонтактноеЛицо           КАК КонтактноеЛицо,
	|	СчетПоставщика.ВремяНапоминания КАК ДатаНапоминания
	|ИЗ
	|	Документ.СчетНаОплатуПоставщика КАК СчетПоставщика
	|	
	|ГДЕ 
	|	СчетПоставщика.НапомнитьОСобытии = Истина
	|	И СчетПоставщика.ВремяНапоминания <= &ДатаСреза
	|	И СчетПоставщика.Ответственный = &ВыбПользователь
	|	И НЕ СчетПоставщика.ПометкаУдаления
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ИзменениеСостоянияОС.Ссылка           КАК ДокументНапоминания,
	|	ИзменениеСостоянияОС.Ответственный    КАК Пользователь,
	|	&ПустойКонтрагент                     КАК Контрагент,
	|	&ПустоеКонтактноеЛицо                 КАК КонтактноеЛицо,
	|	ИзменениеСостоянияОС.ВремяНапоминания КАК ДатаНапоминания
	|ИЗ
	|	Документ.ИзменениеСостоянияОС КАК ИзменениеСостоянияОС
	|ГДЕ 
	|	ИзменениеСостоянияОС.НапомнитьОСобытии = Истина
	|	И ИзменениеСостоянияОС.ВремяНапоминания <= &ДатаСреза
	|	И ИзменениеСостоянияОС.Ответственный = &ВыбПользователь
	|	И НЕ ИзменениеСостоянияОС.ПометкаУдаления
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ДокЗаказНаПроизводство.Ссылка           КАК ДокументНапоминания,
	|	ДокЗаказНаПроизводство.Ответственный    КАК Пользователь,
	|	&ПустойКонтрагент                       КАК Контрагент,
	|	&ПустоеКонтактноеЛицо                   КАК КонтактноеЛицо,
	|	ДокЗаказНаПроизводство.ВремяНапоминания КАК ДатаНапоминания
	|ИЗ
	|	Документ.ЗаказНаПроизводство КАК ДокЗаказНаПроизводство
	|ГДЕ 
	|	ДокЗаказНаПроизводство.НапомнитьОСобытии = Истина
	|	И ДокЗаказНаПроизводство.ВремяНапоминания <= &ДатаСреза
	|	И ДокЗаказНаПроизводство.Ответственный = &ВыбПользователь
	|	И НЕ ДокЗаказНаПроизводство.ПометкаУдаления
	|	
	|";*/
			//РезультатЗапроса = Запрос.Выполнить();
			if(true/*НЕ РезультатЗапроса.Пустой()*/)
			{
				//Выборка = РезультатЗапроса.Выбрать();
				while(true/*Выборка.Следующий()*/)
				{
					if(true/*Выборка.ДокументНапоминания <> Неопределено И НЕ Выборка.ДокументНапоминания.Пустая()*/)
					{
						//Док = Выборка.ДокументНапоминания;
						//СтрокаРезТаблицы = РезультирующаяТаблица.Добавить();
						//СтрокаРезТаблицы.ДокументНапоминания = Выборка.ДокументНапоминания;
						//СтрокаРезТаблицы.Пользователь        = ВыбПользователь;
						//СтрокаРезТаблицы.ДатаНапоминания     = Выборка.ДатаНапоминания;
						//СтрокаРезТаблицы.Контрагент          = Выборка.Контрагент;
						//СтрокаРезТаблицы.КонтактноеЛицо      = Выборка.КонтактноеЛицо;
						//СтрокаРезТаблицы.ДатаНапоминания     = Выборка.ДатаНапоминания;
						//СтрокаРезТаблицы.ТекстНапоминания = Строка(Док);
						if(true/*ТипЗнч(Док) = Тип("ДокументСсылка.Событие") И СтрЧислоВхождений(Док.ОписаниеСобытия, "День рождения") > 0*/)
						{
							//СтрокаРезТаблицы.ФлагДеньРождения = Истина;
						}
						if(true/*ТипЗнч(Док) = Тип("ДокументСсылка.Событие")*/)
						{
							//СтрокаРезТаблицы.Тема = Строка(Док.ВидСобытия);
							//СтрокаРезТаблицы.ТекстНапоминания = Док.ОписаниеСобытия + Символы.ПС + "с " + ?(НЕ ЗначениеЗаполнено(Док.НачалоСобытия), "Не задано",Формат(Док.НачалоСобытия, "ДФ='dd.MM.yyyy (HH:mm)'")) + " по " + ?(НЕ ЗначениеЗаполнено(Док.ОкончаниеСобытия), "Не задано",Формат(Док.ОкончаниеСобытия, "ДФ='dd.MM.yyyy (HH:mm)'")) + Символы.ПС + СтрокаРезТаблицы.ТекстНапоминания;
						}
					}
				}
				//;;
			}
			//ОбработкаСпискаНапоминаний(РезультирующаяТаблица);
		}
		// ПроверитьНапоминанияПользователя()
		// Процедура проверяет наличие активных заметок по переданному объекту
		// и открывает список заметок в случае наличия активных

		public void ПроверитьЗаметкиПоОбъекту(/*Объект*/)
		{
			if(true/*ТипЗнч(Объект) = Тип("СписокЗначений")*/)
			{
				if(true/*Объект.Количество() = 1*/)
				{
					//Объект = Объект[0].Значение;
				}
			}
			//Запрос = Новый Запрос;
			//Запрос.УстановитьПараметр("Объект",Объект);
			//Запрос.УстановитьПараметр("ТекущаяДата",ТекущаяДата());
			/*Запрос.Текст = "
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
	|	Заметки.Объект
	|ИЗ
	|	РегистрСведений.Заметки КАК Заметки
	|ГДЕ
	|	Заметки.Объект В(&Объект)
	|	И Заметки.Активная = ИСТИНА
	|	И Заметки.Дата <= &ТекущаяДата";*/
			//Выборка = Запрос.Выполнить().Выбрать();
			if(true/*Выборка.Следующий()*/)
			{
				//Предупреждение("ВНИМАНИЕ! Есть активные заметки.",5);
				//ФормаСписка = РегистрыСведений.Заметки.ПолучитьФормуСписка();
				if(true/*ТипЗнч(Объект) = Тип("СписокЗначений")*/)
				{
					//ФормаСписка.Отбор.Объект.ВидСравнения = ВидСравнения.ВСписке;
				}
				//ФормаСписка.Отбор.Объект.Значение = Объект;
				//ФормаСписка.Отбор.Объект.Использование = Истина;
				//ФормаСписка.Отбор.Активная.Значение = Истина;
				//ФормаСписка.Отбор.Активная.Использование = Истина;
				//ФормаСписка.Отбор.Дата.Использование = Истина;
				//ФормаСписка.Отбор.Дата.Значение = ТекущаяДата();
				//ФормаСписка.Отбор.Дата.ВидСравнения = ВидСравнения.МеньшеИлиРавно;
				//ФормаСписка.ЭлементыФормы.РегистрСведенийСписок.Колонки.Объект.Видимость = Ложь;
				//ФормаСписка.Открыть();
			}
		}
		// Процедура подготовливает список объектов из переданного документа для проверки заметок
		//

		public void ПроверитьЗаметкиПоДокументу(/*ДокументОбъект*/)
		{
			//МетаданныеДокумента = ДокументОбъект.Метаданные();
			//СписокОбъектовДляПроверки = Новый СписокЗначений;
			if(true/*МетаданныеДокумента.Реквизиты.Найти("Контрагент") <> Неопределено И ТипЗнч(ДокументОбъект.Контрагент) = Тип("СправочникСсылка.Контрагенты")*/)
			{
				//СписокОбъектовДляПроверки.Добавить(ДокументОбъект.Контрагент);
			}
			if(true/*МетаданныеДокумента.Реквизиты.Найти("КонтактноеЛицоКонтрагента") <> Неопределено И ТипЗнч(ДокументОбъект.КонтактноеЛицоКонтрагента) = Тип("СправочникСсылка.ФизическиеЛица")*/)
			{
				//СписокОбъектовДляПроверки.Добавить(ДокументОбъект.КонтактноеЛицоКонтрагента);
			}
			//ПроверитьЗаметкиПоОбъекту(СписокОбъектовДляПроверки);
		}
		////////////////////////////////////////////////////////////////////////////////
		// РАБОЧЕЕ МЕСТО МЕНЕДЖЕРА ПО ПРОДАЖАМ
		// Процедура обрабатывает событие проверки перетаскивания
		// номенклатуры в заказ покупателя.
		//

		public void ПроверкаПеретаскиванияВЗаказ(/*Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ИмяТЧ*/)
		{
			//СтандартнаяОбработка = Ложь;
			if(true/*ТипЗнч(ПараметрыПеретаскивания.Значение) <> Тип("Структура")*/)
			{
				//ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
				//ПараметрыПеретаскивания.ДопустимыеДействия = ДопустимыеДействияПеретаскивания.НеОбрабатывать;
			}
			if(true/*((ИмяТЧ = "Товары" ИЛИ ИмяТЧ = "ВозвратнаяТара") И ПараметрыПеретаскивания.Значение.Номенклатура.Услуга)
	 ИЛИ (ИмяТЧ = "Услуги" И НЕ ПараметрыПеретаскивания.Значение.Номенклатура.Услуга)*/)
			{
				//ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
				//ПараметрыПеретаскивания.ДопустимыеДействия = ДопустимыеДействияПеретаскивания.НеОбрабатывать;
			}
		}
		// Процедура добавляет новую строку в ТЧ переденного имя.
		//

		public void ДобавитьСтрокуВТабличнуюЧастьДокумента(/*СтруктураДанныхДобавления, ИмяТЧ, ЭтотОбъект, ЭтаФорма*/)
		{
			/*// Спросим про добавляемое количество
*/
			//КоличествоДобавления = 1;
			if(true/*НЕ ВвестиЧисло(КоличествоДобавления, "Введите количество", 15, 3)*/)
			{
			}
			if(true/*КоличествоДобавления = 0*/)
			{
			}
			//СтруктураДанныхДобавления.Вставить("Количество",КоличествоДобавления);
			//ЭтаФорма.ОбработкаПодбора(ЭтотОбъект[ИмяТЧ], СтруктураДанныхДобавления);
		}
		// Процедура обрабатывает событие перетаскивания
		// номенклатуры в заказ покупателя.
		//

		public void ПеретаскиваниеВЗаказ(/*Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, ИмяТЧ, ЭтотОбъект, ЭтаФорма*/)
		{
			//СтандартнаяОбработка = Ложь;
			if(true/*ТипЗнч(ПараметрыПеретаскивания.Значение) <> Тип("Структура")*/)
			{
				//ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
				//ПараметрыПеретаскивания.ДопустимыеДействия = ДопустимыеДействияПеретаскивания.НеОбрабатывать;
			}
			if(true/*((ИмяТЧ = "Товары" ИЛИ ИмяТЧ = "ВозвратнаяТара") И ПараметрыПеретаскивания.Значение.Номенклатура.Услуга)
	 ИЛИ (ИмяТЧ = "Услуги" И НЕ ПараметрыПеретаскивания.Значение.Номенклатура.Услуга)*/)
			{
				//ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Отмена;
				//ПараметрыПеретаскивания.ДопустимыеДействия = ДопустимыеДействияПеретаскивания.НеОбрабатывать;
			}
			//ДобавитьСтрокуВТабличнуюЧастьДокумента(ПараметрыПеретаскивания.Значение, ИмяТЧ, ЭтотОбъект, ЭтаФорма);
		}
		////////////////////////////////////////////////////////////////////////////////
		// РЕГИСТРАЦИЯ ДАННЫХ НЕЗАРЕГИСТРИРОВАННЫХ КОНТРАГЕНТОВ, БЕЗ ДОБАВЛЕНИЯ В СПРАВОЧНИК
		// Процедура записывает в регистр сведений данные
		// незарегистрированного контрагента.
		//

		public void ЗаписатьДанныеНезарегистрированногоКонтрагента(/*Ссылка, ДанныеНезарегистрированногоКонтрагента, Отказ*/)
		{
			//ДанныеНезарегистрированногоКонтрагента.ОбъектРегистратор = Ссылка;
		}
		// Процедура читает из регистра сведений данные
		// незарегистрированного контрагента.
		//

		public void ПрочитатьДанныеНезарегистрированногоКонтрагента(/*Ссылка, ДанныеНезарегистрированногоКонтрагента*/)
		{
			if(true/*ЗначениеЗаполнено(Ссылка)*/)
			{
				//ДанныеНезарегистрированногоКонтрагента.ОбъектРегистратор = Ссылка;
				//ДанныеНезарегистрированногоКонтрагента.Прочитать();
			}
		}
		// Процедура записывает нового контрагента, заполняя его даннными
		// из регистра сведений.
		//

		public void РегистрироватьНовогоКонтрагента(/*Элемент, Текст, Значение, СтандартнаяОбработка, мПоискПоСтрокеКонтрагента, мТекстПоискаПоСтрокеКонтрагента, мПоследнееЗначениеЭлементаПоискаПоСтрокеКонтрагент, ЭтаФорма, Контрагент, КонтактноеЛицо, Модифицированность, ДанныеНезарегистрированногоКонтрагента*/)
		{
			//СтандартнаяОбработка = Ложь;
			if(true/*ТипЗнч(Элемент.Значение) <> Тип("Строка")*/)
			{
				//ТекстВопроса = "Контрагент не найден. Зарегистрировать данные нового контрагента?";
				//ОтветНаВопрос = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНетОтмена, , КодВозвратаДиалога.Нет);
				if(true/*ОтветНаВопрос <> КодВозвратаДиалога.Да*/)
				{
					if(true/*ОтветНаВопрос = КодВозвратаДиалога.Нет*/)
					{
						//мПоискПоСтрокеКонтрагента = Истина;
						//мТекстПоискаПоСтрокеКонтрагента = Текст;
					}
				}
				//ОбработкаРедактирования = Обработки.РедактированиеДанныхНезарегистрированныхКонтрагентов.Создать();
				//ОбработкаРедактирования.Запись = ДанныеНезарегистрированногоКонтрагента;
				//ФормаРегистрацииНовогоКонтрагента = ОбработкаРедактирования.ПолучитьФорму(, ЭтаФорма);
				//ФормаРегистрацииНовогоКонтрагента.ЗаполнитьНачальныеДанные();
				//ДанныеНезарегистрированногоКонтрагента.НаименованиеКонтрагента = Текст;
				if(true/*ТипЗнч(КонтактноеЛицо) = Тип("Строка")*/)
				{
					//ДанныеНезарегистрированногоКонтрагента.ФИОКонтактногоЛица = КонтактноеЛицо;
				}
				//РезультатЗакрытияФормы = ФормаРегистрацииНовогоКонтрагента.ОткрытьМодально();
				if(true/*РезультатЗакрытияФормы = Неопределено*/)
				{
					//Значение       = ДанныеНезарегистрированногоКонтрагента.НаименованиеКонтрагента;
					//Контрагент     = ДанныеНезарегистрированногоКонтрагента.НаименованиеКонтрагента;
					//КонтактноеЛицо = ДанныеНезарегистрированногоКонтрагента.ФИОКонтактногоЛица;
				}
				//Модифицированность = Истина;
			}
		}
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ
		// Процедура перехватывает событие начала выбора контактного лица контрагента
		//
		// Параметры
		//  Элемент - элемент управления, выбора контактного лица контрагента
		//  СтандартнаяОбработка - булево
		//  СтандартнаяОбработка - булево
		//  Контрагент - СправочникСсылка.Контрагенты, ,контрагент контактного лица
		//

		public void НачалоВыбораКонтактногоЛицаКонтрагента(/*Элемент, СтандартнаяОбработка, Контрагент = Неопределено*/)
		{
			//СтандартнаяОбработка = Ложь;
			//ФормаВыбора = Справочники.КонтактныеЛицаКонтрагентов.ПолучитьФормуВыбора(,Элемент);
			if(true/*ТипЗнч(Контрагент) = Тип("СправочникСсылка.Контрагенты") И Контрагент <> Справочники.Контрагенты.ПустаяСсылка()*/)
			{
				//ФормаВыбора.СправочникСписок.Отбор.Владелец.Использование = Истина;
				//ФормаВыбора.СправочникСписок.Отбор.Владелец.Значение = Контрагент;
			}
			if(true/*ЗначениеЗаполнено(Элемент.Значение) И ТипЗнч(Элемент.Значение) = Тип("СправочникСсылка.КонтактныеЛицаКонтрагентов")*/)
			{
				//ФормаВыбора.ЭлементыФормы.СправочникСписок.ТекущаяСтрока = Элемент.Значение;
			}
			//ФормаВыбора.РежимВыбора = Истина;
			//ФормаВыбора.Заголовок = "Выбор контактного лица контрагента";
			//ФормаВыбора.Открыть();
		}
		// Процедура перехватывает событие начала выбора прочего контактного лица
		//
		// Параметры
		//  Элемент - элемент управления, выбора контактного лица контрагента
		//  СтандартнаяОбработка - булево
		//  СтандартнаяОбработка - булево
		//  Контрагент - СправочникСсылка.Контрагенты, ,контрагент контактного лица
		//

		public void НачалоВыбораПрочегоКонтактногоЛица(/*Элемент, СтандартнаяОбработка, Пользователь = Неопределено*/)
		{
			//СтандартнаяОбработка = Истина;
		}
		// Процедура перехватывает событие начала выбора прочего контактного лица
		//
		// Параметры
		//  Элемент - элемент управления, выбора контактного лица контрагента
		//  СтандартнаяОбработка - булево
		//  СтандартнаяОбработка - булево
		//  Контрагент - СправочникСсылка.Контрагенты, ,контрагент контактного лица
		//

		public void НачалоВыбораЛичныхКонтактов(/*Элемент, СтандартнаяОбработка*/)
		{
		}
		// Процедура открывает форму списка справочника контактные лица,
		//с признаком контактные лица контрагентов
		///

		public void ОткрытьСписокКонтактныхЛицКонтрагентов(/**/)
		{
			//ФормаСписка =  Справочники.КонтактныеЛицаКонтрагентов.ПолучитьФормуСписка(,, "КонтактныеЛицаКонтрагента");
			if(true/*ФормаСписка.Открыта()*/)
			{
				//ФормаСписка.Активизировать();
			}
			//ФормаСписка.Открыть();
		}
		// Процедура открывает форму списка справочника контактные лица,
		//с признаком контактные лица контрагентов
		///

		public void ОткрытьСписокПрочихКонтактныхЛиц(/**/)
		{
			//ФормаСписка =  Справочники.КонтактныеЛица.ПолучитьФормуСписка(,, "КонтактныеЛица");
			if(true/*ФормаСписка.Открыта()*/)
			{
				//ФормаСписка.Активизировать();
			}
			//ФормаСписка.Открыть();
		}
		// Процедура открывает форму списка справочника контактные лица,
		//с признаком личные контакты
		///

		public void ОткрытьСписокЛичныхКонтактов(/**/)
		{
			//ФормаСписка = Справочники.ЛичныеКонтакты.ПолучитьФормуСписка(,, "ЛичныеКонтакты");
			if(true/*ФормаСписка.Открыта()*/)
			{
				//ФормаСписка.Активизировать();
			}
			//ФормаСписка.Открыть();
		}
		// Функция возвращает таблицу значений, заполненную информацией о контрагентах контактного лица
		// из регистра сведений "КонтактныеЛицаКонтрагентов"

		public object ВернутьТаблицуКонтрагентовКонтактногоЛица(/*Ссылка,ТолькоПустые = Ложь*/)
		{
			//Запрос = Новый Запрос;
			/*Запрос.Текст = "
	|ВЫБРАТЬ
	|	ИсторияКонтактныхЛицКонтрагентов.Контрагент КАК Контрагент,
	|	ИсторияКонтактныхЛицКонтрагентов.КонтактноеЛицоКонтрагента.Должность КАК Должность,
	|	ИсторияКонтактныхЛицКонтрагентов.КонтактноеЛицоКонтрагента.РольКонтактногоЛица КАК РольКонтактногоЛица,
	|	ИсторияКонтактныхЛицКонтрагентов.Период КАК Период,
	|   ИсторияКонтактныхЛицКонтрагентов.ДатаУвольнения КАК ДатаУвольнения
	|ИЗ
	|	РегистрСведений.ИсторияКонтактныхЛицКонтрагентов КАК ИсторияКонтактныхЛицКонтрагентов
	|
	|ГДЕ
	|	ИсторияКонтактныхЛицКонтрагентов.КонтактноеЛицо = &КонтактноеЛицо";*/
			//Запрос.УстановитьПараметр("КонтактноеЛицо",Ссылка);
			//Результаты = Запрос.Выполнить().Выгрузить();
			return null;
		}
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ И ФУНКЦИИ РАБОТЫ С МЕХАНИЗМОМ НАПОМИНАНИЙ
		// Функция Определяет картинку для напоминания
		//
		// Параметры
		//  Напоминание - Произвольный, объект напоминания
		//  ТипСобытия  - тип события, если не указан - определяется по напоминанию
		//
		// Возвращаемое значение:
		//  Картинка - Картинка
		//

		public object ПолучитьКартинкуНапоминания(/*Напоминание,ТипСобытия = Неопределено*/)
		{
			//ИндексВозврата = ОпределитьИндексКартинкиВидаСобытия(Напоминание,ТипСобытия);
			if(true/*ИндексВозврата = 15*/)
			{
			}
			return null;
		}
		//ПолучитьКартинкуНапоминания()
		// Процедура вызывается по событию НачалоВыбораИзСписка
		// у полей ввода, в которых редактируются даты со временем.
		//
		//  Параметры
		//   ЭлементУправления - ПолеВвода, в котором редактируется значение даты
		//   ЭтаФорма - Форма
		//   Пользователь - СправочникСсылка.Пользователи
		//   СтандартнаяОбработка - булево
		//   ПолныйГод - Булево, предсавление года даты в списке выбора
		//

		public void ВыбратьВремяИзСписка(/*ЭлементУправления, ЭтаФорма, Пользователь, СтандартнаяОбработка, ПолныйГод = Истина*/)
		{
			//СтандартнаяОбработка = Ложь;
			//ДатаВремени = ЭлементУправления.Значение;
			//СтруктураРабочихВремен = ОпределитьНачалоИОкончаниеРабочегоДняПользователя(Пользователь, ДатаВремени);
			//СписокВремен = Новый СписокЗначений;
			//НачалоРабочегоДня = НачалоДня(ДатаВремени)+Час(СтруктураРабочихВремен.ДатаНачала)*60*60+Минута(СтруктураРабочихВремен.ДатаНачала)*60;
			//ОкончаниеРабочегоДня = НачалоДня(ДатаВремени)+Час(СтруктураРабочихВремен.ДатаОкончания)*60*60+Минута(СтруктураРабочихВремен.ДатаОкончания)*60 - 60*60;
			//НачалоРабочегоДняДляСпискаВыбора = НачалоЧаса(НачалоРабочегоДня);
			//а = 0;
			while(true/*Истина*/)
			{
				//ВремяСписка = НачалоРабочегоДняДляСпискаВыбора + а*30*60;
				if(true/*НачалоЧаса(ВремяСписка) > НачалоЧаса(ОкончаниеРабочегоДня)*/)
				{
				}
				if(true/*ПолныйГод*/)
				{
					//СписокВремен.Добавить(ВремяСписка, Формат(ВремяСписка,"ДФ='дд.ММ.гггг ЧЧ:мм'"));
				}
				//а = а + 1;
			}
			/*; 

	НачальноеЗначение = СписокВремен.НайтиПоЗначению(ДатаВремени);*/
			if(true/*НачальноеЗначение = Неопределено*/)
			{
				//ВыбранноеВремя = ЭтаФорма.ВыбратьИзСписка(СписокВремен, ЭлементУправления);
			}
			if(true/*ВыбранноеВремя <> Неопределено*/)
			{
				//ЭлементУправления.Значение = ВыбранноеВремя.Значение;
			}
		}
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ И ФУНКЦИИ РАБОТЫ С МЕХАНИЗМОМ СОБЫТИЙ И КАЛЕНДАРЕМ ПОЛЬЗОВАТЕЛЯ
		// Функция Определяет индекс картинки
		//
		// Параметры
		//  ВидСобытия - ПеречислениеСсылка.ВидыСобытий
		//  ТипСобытия - ПеречислениеСсылка.ВходящееИсходящееСобытие
		//
		// Возвращаемое значение:
		//  Индекс - число
		//

		public object ОпределитьИндексКартинкиВидаСобытия(/*Объект,ТипСобытия = Неопределено*/)
		{
			if(true/*ТипЗнч(Объект) = Тип("ДокументСсылка.Событие")*/)
			{
				//ВидСобытия = Объект.ВидСобытия;
				//ТипСобытия = Объект.ТипСобытия;
			}
			if(true/*ТипЗнч(ВидСобытия) = Тип("ПеречислениеСсылка.ВидыСобытий")*/)
			{
				if(true/*ВидСобытия = Перечисления.ВидыСобытий.ТелефонныйЗвонок*/)
				{
					if(true/*ТипСобытия = Перечисления.ВходящееИсходящееСобытие.Исходящее*/)
					{
					}
				}
			}
			return null;
		}
		// ОпределитьИндексКартинкиВидаСобытия()
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ И ФУНКЦИИ РАБОТЫ С ДОПОЛНИТЕЛЬНЫХ УСЛОВИЙ ПО ДОГОВОРАМ ВЗАИМОРАСЧЕТОВ
		// Процедура формирует отчет для анализа условий поставок по договорам взаиморасчетов
		//
		// Параметры:
		//  Ссылка - ДокументСсылка.УсловияПоставокПоДоговорамКонтрагентов
		//

		public void СформироватьАнализУсловийДоговораВзаиморасчетов(/*ТекущийПользователь, Ссылка*/)
		{
			if(true/*ТипЗнч(Ссылка) <> Тип("ДокументСсылка.УсловияПоставокПоДоговорамКонтрагентов")*/)
			{
			}
			//Отчет = Отчеты.ВыполнениеУсловийПоДоговорамКонтрагентов.Создать();
			//Отчет.ДатаНачала                           = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(ТекущийПользователь, "ОсновнаяДатаНачалаОтчетов");
			//Отчет.ДатаОкончания                        = ТекущаяДата();
			//Отчет.ГруппировкаКонтрагент                = Истина;
			//Отчет.ГруппировкаДоговорКонтрагента        = Истина;
			//Отчет.ГруппировкаДокументУсловий           = Истина;
			//Отчет.ГруппировкаДокументВыполненияУсловий = Истина;
			//Отчет.РаскрашиватьГруппировки              = Истина;
			//ЭлементОтбора = Отчет.Отбор.Добавить("ДокументУсловий",, "Документ условий");
			//ЭлементОтбора.ВидСравнения  = ВидСравнения.Равно;
			//ЭлементОтбора.Значение      = Ссылка;
			//ЭлементОтбора.Использование = Истина;
			//ФормаОтчета = Отчет.ПолучитьФорму("Форма");
			//ФормаОтчета.НеЗаполнятьНастройкиПриОткрытии = Истина;
			//Отчет.СформироватьОтчет(ФормаОтчета.ЭлементыФормы.ТабличныйДокумент);
			//ФормаОтчета.Открыть();
		}
		////////////////////////////////////////////////////////////////////////////////
		// ПРОЦЕДУРЫ И ФУНКЦИИ РАБОТЫ С МЕХАНИЗМОМ ОБЪМНО-КАЛЕНДАРНОГО ПЛАНИРОВАНИЯ ЗАКУПОК
		// Функция формирует структуру с данными из объекта в принципе любого, но
		//  писалась конкретно для документа ЗаказПоставщику
		//
		// Параметры
		//  Объект - ДокументОбъект.ЗаказПоставщику, но в принципе может быть любой, объект, данные которого необходимо сохранить
		//
		// Возвращаемое значение:
		//   Структура, с данными объекта
		//

		public object СкопироватьДанныеОбъектаВСтруктуру(/*Объект*/)
		{
			//СтруктураДанныхОбъекта = Новый Структура("___ИмяОбъекта___", Объект.Метаданные().Имя);
			return null;
		}
		// Функция заполняет объект данными из структуры
		//
		// Параметры
		//  Объект - объект, который необходимо заполнить данными
		//  СтруктураДанныхОбъекта - структура, с данными, которыми надо заполнить объект
		//
		// Возвращаемое значение:
		//   Булево, успешно ли прошла данная опреация
		//

		public object ВосстановитьДанныеОбъектаИзСтруктуры(/*Объект, СтруктураДанныхОбъекта*/)
		{
			//РезультатРаботы = Истина;
			//ИмяОбъекта = "";
			if(true/*НЕ СтруктураДанныхОбъекта.Свойство("___ИмяОбъекта___", ИмяОбъекта)*/)
			{
				//РезультатРаботы = Ложь;
			}
			if(true/*ИмяОбъекта <> Объект.Метаданные().Имя*/)
			{
				//РезультатРаботы = Ложь;
			}
			if(true/*РезультатРаботы*/)
			{
				//ЗначениеЭлементаСтруктуры = Неопределено;
			}
			return null;
		}
		// Функция сравнивает данные из структуры с данными объекта, для определения их идентичности
		//
		// Параметры
		//  Объект - Объект с данными для сравнения
		//  СтруктураДанныхОбъекта - структура с данными для сравнения
		//
		// Возвращаемое значение:
		//   Булево - идентичны ли данные объета и структуры
		//

		public object СравнитьСтруктуруДанныхОбъектаИОбъект(/*Объект, СтруктураДанныхОбъекта*/)
		{
			//ИмяОбъекта = "";
			if(true/*НЕ СтруктураДанныхОбъекта.Свойство("___ИмяОбъекта___", ИмяОбъекта)*/)
			{
			}
			if(true/*ИмяОбъекта <> Объект.Метаданные().Имя*/)
			{
			}
			//ЗначениеЭлементаСтруктуры = Неопределено;
			return null;
		}
		// СравнитьСтруктуруОбъектаИОбъект()
		// Функция сравнивает две таблицы значений на идентичность структуры и данных
		//
		// Параметры
		//  ТаблицаЗначений1 - ТаблицаЗначений для сравнения
		//  ТаблицаЗначений2 - ТаблицаЗначений для сравнения
		//
		// Возвращаемое значение:
		//   Булево, идентичны или нет две таблицы
		//

		public object СравнитьТаблицыЗначений(/*ТаблицаЗначений1, ТаблицаЗначений2*/)
		{
			if(true/*ТипЗнч(ТаблицаЗначений1) <> Тип("ТаблицаЗначений") ИЛИ ТипЗнч(ТаблицаЗначений2) <> Тип("ТаблицаЗначений")*/)
			{
			}
			if(true/*ТаблицаЗначений1.Количество() <> ТаблицаЗначений2.Количество()*/)
			{
			}
			if(true/*ТаблицаЗначений1.Колонки.Количество() <> ТаблицаЗначений2.Колонки.Количество()*/)
			{
			}
			return null;
		}
		// СравнитьТаблицыЗначений()
		// Функция производит распределние заказов поставщикам из таблицы ИсходнаяТаблицаНоменклатурыЗаказов
		//  по строкам таблицы потребности в номенклатуре ИсходнаяТаблицаПотребности по дополнительному полю "Индекс"
		//
		// Параметры
		//  ИсходнаяТаблицаПотребности - ТаблицаЗначений, таблица потребности в номенклатуре
		//  ИсходнаяТаблицаНоменклатурыЗаказов - ТаблицаЗначений, таблица заказов поставщикам
		//
		// Возвращаемое значение:
		//   Структура, ключ ТаблицаПотребности - исходная таблица потребности с дополнительным полем "Индекс" (число) , где
		//                                        значения соответствуют строкам таблицы ТаблицаНоменклатурыЗаказов в поле "Индекс"
		//            , ключ ТаблицаНоменклатурыЗаказов - исходная таблица закзов поставщикам с дополнительным полем "Индекс" (число) , где
		//                                        значения соответствуют строкам таблицы ТаблицаПотребности в поле "Индекс"
		//

		public object ПолучитьСтруктуруРаспределенныхТаблиц(/*ИсходнаяТаблицаПотребности, ИсходнаяТаблицаНоменклатурыЗаказов, МаксимальноеЗначениеПрогрессора = 0, ТекущееЗначениеПрогрессора = 0*/)
		{
			//ТаблицаПотребности = ИсходнаяТаблицаПотребности.Скопировать();
			//ТаблицаНоменклатурыЗаказов = ИсходнаяТаблицаНоменклатурыЗаказов.Скопировать();
			//ТаблицаНоменклатурыЗаказов.Сортировать("Контрагент ВОЗР, ДатаПоступленияЗаказа УБЫВ");
			//ТаблицаЗаказовПоставщикам = Новый ТаблицаЗначений;
			//ТаблицаЗаказовПоставщикам.Колонки.Добавить("Индекс", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,0)));
			//ТаблицаЗаказовПоставщикам.Колонки.Добавить("ЗаказПоставщику");
			//ТаблицаЗаказовПоставщикам.Колонки.Добавить("Количество", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3)));
			//ТаблицаЗаказовПоставщикам.Колонки.Добавить("Поставщик", Новый ОписаниеТипов("СправочникСсылка.Контрагенты"));
			//ТаблицаЗаказовПоставщикам.Колонки.Добавить("ИДОбъекта");
			if(true/*ТаблицаПотребности.Колонки.Найти("Индекс") = Неопределено*/)
			{
				//ТаблицаПотребности.Колонки.Добавить("Индекс", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,0)));
			}
			if(true/*ТаблицаПотребности.Колонки.Найти("КоличествоПланаОстаток") = Неопределено*/)
			{
				//ТаблицаПотребности.Колонки.Добавить("КоличествоПланаОстаток", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3)));
			}
			//ТаблицаПотребности.Сортировать("Номенклатура ВОЗР, ХарактеристикаНоменклатуры ВОЗР, ДатаПотребности ВОЗР");
			//МаксимальноеЗначениеПрогрессора = ТаблицаПотребности.Количество();
			/*// Сначала распределим все заказы поставщикам, которые предназначены под конкретные заказы покупателей
*/
			//МаксимальноеЗначениеПрогрессора = ТаблицаНоменклатурыЗаказов.Количество();
			/*// После этого в таблице ТаблицаНоменклатурыЗаказов не осталост строк с заказами поставщикам, которым в соответствие
*/
			/*// проставлены определенные заказы покупателей
*/
			/*// Теперь удовлетворим оставшиеся потребности, у которых указаны заказы покупателей, теми заказами поставщикам, у которых
*/
			/*// заказы покупателей не указаны (собственно только они и остались)
*/
			//МаксимальноеЗначениеПрогрессора = ТаблицаПотребности.Количество();
			/*// Теперь удовлетворим оставшиеся потребности у которых заказы покупателей не указаны
*/
			//МаксимальноеЗначениеПрогрессора = ТаблицаПотребности.Количество();
			/*// Если остались свободные остатки по заказам не вошедшие в планы потребности, запишем их новыми строками
*/
			/*// в план потребности с пустыми ссылками кроме Номенклатуры, Характеристики номенклатуры, Заказа покупателя. Дата портебности - пустая.
*/
			//МаксимальноеЗначениеПрогрессора = ТаблицаНоменклатурыЗаказов.Количество();
			if(true/*ТаблицаЗаказовПоставщикам.Колонки.Найти("ИДОбъекта") <> Неопределено*/)
			{
				//ТаблицаЗаказовПоставщикам.Свернуть("ЗаказПоставщику, ИДОбъекта, Индекс, Поставщик", "Количество");
			}
			//СтруктураВозврата = Новый Структура();
			//СтруктураВозврата.Вставить("ТаблицаПотребности", ТаблицаПотребности);
			//СтруктураВозврата.Вставить("ТаблицаЗаказовПоставщикам", ТаблицаЗаказовПоставщикам);
			return null;
		}
		// Функция формирует дерево значений, с распределенными заказами поставщикам под потребности в номенклатуре
		//  для нужд производства и отдела продаж
		//
		// Параметры
		//  ТаблицаСтрокГруппировки             - ТаблицаЗначений, таблица потребностей в номенклатуре
		//  ТаблицаЗаказовПоставщикам           - ТаблицаЗначений, заказы поставщикам, которые необходимо распределить по потребностям
		//  СтруктураЗначенийГруппировок        - Структура, содержащая значения группировок, которыми должен быть ограничен вывод строк,
		//                                        точнее это своеобразный отбор по значениям группировок дерева
		//  Группировки                         - ТаблицаЗначений, группировки дерева, точнее в каком порядке и какую информацию надо
		//                                        отображать в основной колонке дерева
		//  ПоказыватьПустыеСтрокиНижнихУровней - Булево, показывать ли в дереве строки, у которых все подчиненные строки содержат пустые значения
		//
		// Возвращаемое значение:
		//   ДеревоЗначений
		//

		public object ПолучитьДеревоРаспределенияПотребностей(/*ТаблицаСтрокГруппировки, ТаблицаЗаказовПоставщикам, СтруктураЗначенийГруппировок, Группировки, ПоказыватьПустыеСтрокиНижнихУровней, МаксимальноеЗначениеПрогрессора = 0, ТекущееЗначениеПрогрессора = 0*/)
		{
			//Дерево = Новый ДеревоЗначений;
			//Дерево.Колонки.Добавить("ЗначениеГруппировки");
			//Дерево.Колонки.Добавить("КоличествоПлана", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3)));
			//Дерево.Колонки.Добавить("КоличествоФакта", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,3)));
			//Дерево.Колонки.Добавить("ХарактеристикаНоменклатуры", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
			//Дерево.Колонки.Добавить("ИДОбъекта", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(50)));
			//Дерево.Колонки.Добавить("Тара", Новый ОписаниеТипов("Булево"));
			//МаксимальноеЗначениеПрогрессора = ТаблицаСтрокГруппировки.Количество();
			//СформироватьСтрокиДерева(Дерево, ТаблицаСтрокГруппировки, ТаблицаЗаказовПоставщикам, 0, СтруктураЗначенийГруппировок, Группировки, ПоказыватьПустыеСтрокиНижнихУровней, МаксимальноеЗначениеПрогрессора, ТекущееЗначениеПрогрессора);
			return null;
		}
		// Процедура рекурсивно формирует строки дерева для функции ПолучитьДеревоРаспределенияПотребностей
		//
		// Параметры
		//  СтрокаДереваПрошлогоУровня          - СтрокаДереваЗначений, строки подчиненные которой необходимо формировать
		//  ТаблицаСтрокГруппировки             - ТаблицаЗначений, таблица потребностей в номенклатуре
		//  ТаблицаЗаказовПоставщикам           - ТаблицаЗначений, заказы поставщикам, которые необходимо распределить по потребностям
		//  ИндексГруппировки                   - Число, индекс группировки, строки для которой мы формируем
		//  СтруктураЗначенийГруппировок        - Структура, содержащая значения группировок, которыми должен быть ограничен вывод строк,
		//                                        точнее это своеобразный отбор по значениям группировок дерева
		//  Группировки                         - ТаблицаЗначений, группировки дерева, точнее в каком порядке и какую информацию надо
		//                                        отображать в основной колонке дерева
		//  ПоказыватьПустыеСтрокиНижнихУровней - Булево, показывать ли в дереве строки, у которых все подчиненные строки содержат пустые значения
		//
		//
		// Возвращаемое значение:
		//   НЕТ
		//

		public void СформироватьСтрокиДерева(/*СтрокаДереваПрошлогоУровня, ТаблицаСтрокГруппировки, ТаблицаЗаказовПоставщикам, ИндексГруппировки, СтруктураЗначенийГруппировок, Группировки, ПоказыватьПустыеСтрокиНижнихУровней, МаксимальноеЗначениеПрогрессора, ТекущееЗначениеПрогрессора*/)
		{
			if(true/*ИндексГруппировки > Группировки.Количество() - 1*/)
			{
			}
			if(true/*ТаблицаСтрокГруппировки <> МаксимальноеЗначениеПрогрессора И ИндексГруппировки = 1*/)
			{
				//ТекущееЗначениеПрогрессора = ТекущееЗначениеПрогрессора + ТаблицаСтрокГруппировки.Количество();
			}
			//ИмяГруппировки = Группировки[ИндексГруппировки].Имя;
			if(true/*ИмяГруппировки = "Поставщик" ИЛИ ИмяГруппировки = "ЗаказПоставщику" ИЛИ ИмяГруппировки = "ИДОбъекта"*/)
			{
				/*// Поля правой таблицы
*/
				//ЗначенияГруппировки = Неопределено;
				//СтруктураЗначенийГруппировок.Свойство(ИмяГруппировки, ЗначенияГруппировки);
				if(true/*ЗначенияГруппировки = Неопределено*/)
				{
				}
				//ТаблицаСтрокДаннойГруппировки = ТаблицаСтрокГруппировки.Скопировать();
				//ТекущаяТаблицаЗаказовПоставщикам = ТаблицаЗаказовПоставщикам.Скопировать();
				//ИндексСтроки = 0;
				while(true/*Истина*/)
				{
					if(true/*ИндексСтроки > ТекущаяТаблицаЗаказовПоставщикам.Количество() - 1*/)
					{
					}
					//СтрокаТекущейТаблицыЗаказовПоставщикам = ТекущаяТаблицаЗаказовПоставщикам[ИндексСтроки];
					if(true/*ТаблицаСтрокДаннойГруппировки.Найти(СтрокаТекущейТаблицыЗаказовПоставщикам.Индекс, "Индекс") = Неопределено*/)
					{
						//ТекущаяТаблицаЗаказовПоставщикам.Удалить(СтрокаТекущейТаблицыЗаказовПоставщикам);
					}
					//ИндексСтроки = ИндексСтроки + 1;
				}
				if(true/*ТекущаяТаблицаЗаказовПоставщикам.Количество() = 0*/)
				{
					//СтрокаДереваТекущегоУровня = СтрокаДереваПрошлогоУровня.Строки.Добавить();
					//СтрокаДереваТекущегоУровня.ЗначениеГруппировки = "<...>";
					//СформироватьСтрокиДерева(СтрокаДереваТекущегоУровня, ТаблицаСтрокДаннойГруппировки, ТекущаяТаблицаЗаказовПоставщикам, (ИндексГруппировки + 1), СтруктураЗначенийГруппировок, Группировки, ПоказыватьПустыеСтрокиНижнихУровней, МаксимальноеЗначениеПрогрессора, ТекущееЗначениеПрогрессора);
					if(true/*ТипЗнч(СтрокаДереваПрошлогоУровня) = Тип("СтрокаДереваЗначений")*/)
					{
						//СтрокаДереваПрошлогоУровня.КоличествоФакта = СтрокаДереваПрошлогоУровня.КоличествоФакта + СтрокаДереваТекущегоУровня.КоличествоФакта;
					}
					if(true/*НЕ ПоказыватьПустыеСтрокиНижнихУровней И СтрокаДереваТекущегоУровня.Строки.Количество() = 0*/)
					{
						//СтрокаДереваПрошлогоУровня.Строки.Удалить(СтрокаДереваТекущегоУровня);
					}
				}
			}
		}
		// Функция возвращает интервалы напоминаний и представлениями.
		//
		// Параметры
		//  Нет
		//
		// Возвращаемое значение:
		//  СписокЗначений
		//

		public object ПолучитьСписокИнтерваловНапоминания(/**/)
		{
			//СписокИнтервалов = Новый СписокЗначений;
			//СписокИнтервалов.Добавить(5*60,"5 мин.");
			//СписокИнтервалов.Добавить(10*60,"10 мин.");
			//СписокИнтервалов.Добавить(15*60,"15 мин.");
			//СписокИнтервалов.Добавить(30*60,"30 мин.");
			//СписокИнтервалов.Добавить(1*60*60,"1 час");
			//СписокИнтервалов.Добавить(2*60*60,"2 часа");
			//СписокИнтервалов.Добавить(4*60*60,"4 часа");
			//СписокИнтервалов.Добавить(8*60*60,"8 часов");
			//СписокИнтервалов.Добавить(1*24*60*60,"1 день");
			//СписокИнтервалов.Добавить(2*24*60*60,"2 дня");
			//СписокИнтервалов.Добавить(3*24*60*60,"3 дня");
			//СписокИнтервалов.Добавить(4*24*60*60,"4 дня");
			//СписокИнтервалов.Добавить(1*7*24*60*60,"1 неделя");
			return null;
		}
	}
}
